/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xos_net.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../data_struct/head.h"
#include "../helper_objs/head.h"
#include "../config/head.h"
#include "../macro/head.h"
#include "../impl/head.h"
#include "../msg/head.h"
#include "notify_main.h"
#include "notify_tcp.h"
#include "notify_udp.h"
#include "msg_notify.h"

namespace xos_net
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    msg_notify::msg_notify()
    {
    }

    msg_notify::~msg_notify()
    {
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // 
    // proc
    // 
    int msg_notify::proc( xos_box::i_msg*& pMsg )
    {
        int ret = 0;

        if( 0 == ret )
        {
            notify_main obj;
            ret = obj.proc( pMsg );
        }

        if( 0 == ret )
        {
            notify_tcp obj;
            ret = obj.proc( pMsg );
        }

        if( 0 == ret )
        {
            notify_udp obj;
            ret = obj.proc( pMsg );
        }

        return ret;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // bool[0]      : if success
    // 
    // msg[0]       : msg type
    // 
    // str[1]       : local ip
    // int[1]       : local port
    // 
    // str[2]       : peer ip
    // int[2]       : peer port
    // 
    // void[0]      : xos_net::connection*
    // void[1]      : user data
    // 
    int msg_notify::helper_init_notify( xos_box::i_msg *& pMsg, connection * pConnect )
    {
        int ret = 0;

        {
            connection::list()->push_front( (connection::T *)pConnect );
            pConnect->m_connect_iter = connection::list()->begin();
            pMsg->set_void( 0, pConnect );
        }

        return ret;
    }

} // xos_net
